package pers.hxy.lookweather.utils;

import androidx.annotation.NonNull;

import java.util.ArrayList;
import java.util.List;

/**
 * 一些常用的字符串函数
 */
public class StringUtil {
    /**
     *
     * @param s 字符串
     * @param defaultValue 默认值
     * @return 非null的字符串
     */
    @NonNull
    public static String nonNull(String s, @NonNull String defaultValue) {
        return s == null ? defaultValue : s;
    }

    /**
     *
     * @param s  字符串
     * @return 如果s==null返回空字符串
     */
    @NonNull
    public static String nonNull(String s) {
        return nonNull(s, "");
    }

    /**
     *
     * @param s 字符串
     * @return 字符串是否为null或空字符串
     */
    public static boolean isNullOrEmpty(String s) {
        return s == null || s.isEmpty();
    }

    /**
     *
     * @param s 字符串
     * @return 字符串是否不为null且不是空字符串
     */
    public static boolean isNotNullOrEmpty(String s) {
        return !isNullOrEmpty(s);
    }

    /**
     *
     * @param o 对象
     * @return 对象是否为null的字符串描述
     */
    public static String isNull(Object o) {
        return o == null ? "null" : "not null";
    }

    /**
     *
     * @param s 字符串
     * @param c 字符
     * @return 用字符分割后的字符串列表
     */
    public static List<String> split(@NonNull String s, char c) {
        return split(s, c, new ArrayList<>());
    }

    /**
     * 用单个字符分割字符串，用于加速字符串分割，提高性能
     * @param s 要分割的字符串，不能为空
     * @param c 用于分割的字符
     * @param buffer 缓存
     * @return 分割后的字符串列表
     */
    public static List<String> split(@NonNull String s, char c, @NonNull List<String> buffer) {
        int off = 0;
        int next = 0;
        while ((next = s.indexOf(c, off)) != -1) {
            buffer.add(s.substring(off, next));
            off = next + 1;
        }
        buffer.add(s.substring(off));
        return buffer;
    }
}
